ECS Exec の有効化で update-service が InvalidParameterException で失敗するときの対処方法
困っていた内容
ECS で稼働しているコンテナのデバックのため、AWS公式ドキュメントを参考に ECS Exec の有効化を行なっています。既存の ECS サービスのためupdate-service
でECS Execの有効化を行なったところ、InvalidParameterException
で失敗します。なぜでしょうか?
$ aws ecs update-service \ --cluster hato-cluster \ --service hato-exec-Service \ --enable-execute-command An error occurred (InvalidParameterException) when calling the UpdateService operation: The service couldn't be updated because a valid taskRoleArn is not being used. Specify a valid task role in your task definition and try again.
どう対応すればいいの?
タスクロールのアクセス許可をご確認ください。
ECS サービスに対して ECS Exec を有効にするには、次のアクセス許可が必要です。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ssmmessages:CreateControlChannel", "ssmmessages:CreateDataChannel", "ssmmessages:OpenControlChannel", "ssmmessages:OpenDataChannel" ], "Resource": "*" } ] }
アクセス許可は、ECS サービスに設定したタスク定義のタスクロールを通して付与する必要があり、権限が付与されていない場合、update-service
コマンドはInvalidParameterException
で失敗します。
※アクセス許可が必要になるのは、ECS タスクの起動時や ECS Exec の接続タイミングではありませんのでご注意ください。
ECS サービスのタスクロールを確認する方法
ECS コンソールを開き、「クラスター」をクリック
確認したい ECS サービスが含まれる ECS クラスターをクリック
確認したい ECS サービスをクリック
タスク定義をクリック
タスクロールが表示されます。クリックすると IAM ロールの詳細画面に遷移します。
タスクロール:なし
タスクロールは必須項目ではないため、設定されていない場合があります。その場合「なし」と表示されます。
ECS Exec を有効にする場合はタスクロール(IAMロール)が必要なため、まずはタスクロールの設定からお試しください。
参考資料
The ECS Exec feature requires a task IAM role to grant containers the permissions needed for communication between the managed SSM agent (execute-command agent) and the SSM service.